#ifndef TYPECHECK_VISITOR_H
#define TYPECHECK_VISITOR_H

#include <stdio.h>
#include <stdlib.h>
#include "base.h"
#include "syntaxTree.h"
#include "symbolTable.h"

Visitor *typecheck_newVisitor();
void tchk_visit_program(Visitor *visitor, TreeNode *node);
void tchk_visit_cabecalho_programa(Visitor *visitor, TreeNode *node);
void tchk_visit_identificador(Visitor *visitor, TreeNode *node);
void tchk_visit_numero_sem_sinal(Visitor *visitor, TreeNode *node);
void tchk_visit_parte_declaracao_variavel(Visitor *visitor, TreeNode *node);
void tchk_visit_declaracao_variavel(Visitor *visitor, TreeNode *node);
void tchk_visit_instrucao_lista(Visitor *visitor, TreeNode *node);
void tchk_visit_instrucao_de_atribuicao(Visitor *visitor, TreeNode *node);
void tchk_visit_expressao_simples(Visitor *visitor, TreeNode *node);

void (*visitFunctions[])(Visitor *visitor, TreeNode *node) = {
	tchk_visit_program,
	tchk_visit_cabecalho_programa,
	tchk_visit_identificador,
	tchk_visit_numero_sem_sinal,
	tchk_visit_parte_declaracao_variavel,
	tchk_visit_declaracao_variavel,
	tchk_visit_instrucao_lista,
	tchk_visit_instrucao_de_atribuicao,
	tchk_visit_expressao_simples
};

#endif //TYPECHECK_VISITOR_H
